package org.genew.squadra.xml.model.epubbiblio;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

public class EpubBiblio {
	
	private List<Epub> ePubs;
	private int numeroAutori;
	private int numeroEdtori;
	private String autorePiuPresente;
	private String editorePiuPresente;
	private int mediaImmagini;
	private int totaleParole;
	private int totaleImmagini;
	private int totaleCapitoli;
	
	
	
	
	public EpubBiblio() {
		super();
	}
	
	public EpubBiblio(List<Epub> ePubs, int numeroAutori, int numeroEdtori,
			String autorePiuPresente, String editorePiuPresente,
			int mediaImmagini) {
		super();
		this.ePubs = ePubs;
		this.numeroAutori = numeroAutori;
		this.numeroEdtori = numeroEdtori;
		this.autorePiuPresente = autorePiuPresente;
		this.editorePiuPresente = editorePiuPresente;
		this.mediaImmagini = mediaImmagini;
	}
	public List<Epub> getePubs() {
		return ePubs;
	}
	public void setePubs(List<Epub> ePubs) {
		this.ePubs = ePubs;
	}
	public int getNumeroAutori() {
		return numeroAutori;
	}
	public void setNumeroAutori(int numeroAutori) {
		this.numeroAutori = numeroAutori;
	}
	public int getNumeroEdtori() {
		return numeroEdtori;
	}
	public void setNumeroEdtori(int numeroEdtori) {
		this.numeroEdtori = numeroEdtori;
	}
	public String getAutorePiuPresente() {
		return autorePiuPresente;
	}
	public void setAutorePiuPresente(String autorePiuPresente) {
		this.autorePiuPresente = autorePiuPresente;
	}
	public String getEditorePiuPresente() {
		return editorePiuPresente;
	}
	public void setEditorePiuPresente(String editorePiuPresente) {
		this.editorePiuPresente = editorePiuPresente;
	}
	public int getMediaImmagini() {
		return mediaImmagini;
	}
	public void setMediaImmagini(int mediaImmagini) {
		this.mediaImmagini = mediaImmagini;
	}


	public int getTotaleParole() {
		return totaleParole;
	}

	public void setTotaleParole(int totaleParole) {
		this.totaleParole = totaleParole;
	}

	public int getTotaleImmagini() {
		return totaleImmagini;
	}

	public void setTotaleImmagini(int totaleImmagini) {
		this.totaleImmagini = totaleImmagini;
	}

	public int getTotaleCapitoli() {
		return totaleCapitoli;
	}

	public void setTotaleCapitoli(int totaleCapitoli) {
		this.totaleCapitoli = totaleCapitoli;
	}

	public void setMetadata(int j, File tempF){
		
		File fXmlFile = tempF;
//		/this.ePubs.get(j);
		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder dBuilder;
		try {
			dBuilder = dbFactory.newDocumentBuilder();
			Document doc = dBuilder.parse(fXmlFile);
			doc.getDocumentElement().normalize();
			
			//Estraggo il nodo del titolo
			NodeList nMeta = doc.getElementsByTagName("metadata");
			String expression = "/package/metadata/*";
			XPath xPath =  XPathFactory.newInstance().newXPath();
			NodeList XMeta;
			try {
				XMeta = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
				for (int i = 0; i < XMeta.getLength(); i++) {
	                if(XMeta.item(i).getNodeName().equals("dc:title")){
	                	this.ePubs.get(j).setTitolo(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:identifier")){
	                	this.ePubs.get(j).setIsbn(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:language")){
	                	this.ePubs.get(j).setLingua(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:creator")){
	                	this.ePubs.get(j).setAutore(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:coverage")){
	                	this.ePubs.get(j).setCapitoli(Integer.parseInt(XMeta.item(i).getTextContent()));
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:description")){
	                	this.ePubs.get(j).setDescrizione(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:date")){
	                	this.ePubs.get(j).setData(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:contributor")){
	                	this.ePubs.get(j).setCollaboratore(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:publisher")){
	                	this.ePubs.get(j).setEditore(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:format")){
	                	this.ePubs.get(j).setFormato(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:relation")){
	                	this.ePubs.get(j).setRelazione(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:type")){
	                	this.ePubs.get(j).setTipo(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:subject")){
	                	this.ePubs.get(j).setSoggetto(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:source")){
	                	this.ePubs.get(j).setOrigine(XMeta.item(i).getTextContent());
	                }
	                if(XMeta.item(i).getNodeName().equals("dc:rights")){
	                	this.ePubs.get(j).setDirittiAutore(XMeta.item(i).getTextContent());
	                }
	            }
			} catch (XPathExpressionException e) {
				// TODO Auto-generated catch block
				
				e.printStackTrace();
				
			}
			
			
			
			
		} catch (ParserConfigurationException | SAXException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	public void printAll(){
		Iterator i = this.ePubs.iterator();
		while(i.hasNext()){
			Epub temp = (Epub) i.next();
			System.out.println(
					"Auth" + temp.getAutore() + "\n" +
					"Title" + temp.getTitolo() + "\n" +
					"Cap" + temp.getCapitoli() +"\n" +
					"ISBN" + temp.getIsbn() +"\n" +
					"Lingua" + temp.getLingua() +"\n" +
					"Parole" + temp.getParole() +"\n" +
					"Path" + temp.getPathFile()
					);
			
		}
	}
	

}
